package utils;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
import java.util.Scanner;

import org.apache.http.HttpHeaders;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.params.ConnManagerParams;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;


@SuppressWarnings("deprecation")
public class HttpHelperUtils {
	    /** The time it takes for our client to timeout */
	    public static final int HTTP_TIMEOUT = 30 * 1000; // milliseconds
	 
	    /** Single instance of our HttpClient */
	    private static HttpClient mHttpClient;
	 
	    /**
	     * Get our single instance of our HttpClient object.
	     *
	     * @return an HttpClient object with connection parameters set
	     */
	    private static HttpClient getHttpClient() {
	        if (mHttpClient == null) {
	            mHttpClient = new DefaultHttpClient();
	            final HttpParams params = mHttpClient.getParams();
	            HttpConnectionParams.setConnectionTimeout(params, HTTP_TIMEOUT);
	            HttpConnectionParams.setSoTimeout(params, HTTP_TIMEOUT);
	            ConnManagerParams.setTimeout(params, HTTP_TIMEOUT);
	        }
	        return mHttpClient;
	    }
	 
	    /**
	     * Performs an HTTP Post request to the specified url with the
	     * specified parameters.
	     *
	     * @param url The web address to post the request to
	     * @param postParameters The parameters to send via the request
	     * @return The result of the request
	     * @throws Exception
	     */
	    public static String executeHttpPost(String url, ArrayList<NameValuePair> postParameters) throws Exception {
	        BufferedReader in = null;
	        try {
	            HttpClient client = getHttpClient();
	            HttpPost request = new HttpPost(url);
	            request.setHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded");
	            UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
	            request.setEntity(formEntity);
	            HttpResponse response = client.execute(request);
	            in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
	 
	            StringBuffer sb = new StringBuffer("");
	            String line = "";
	            String NL = System.getProperty("line.separator");
	            while ((line = in.readLine()) != null) {
	                sb.append(line + NL);
	            }
	            in.close();
	 
	            String result = sb.toString();
	            return result;
	        } finally {
	            if (in != null) {
	                try {
	                    in.close();
	                } catch (IOException e) {
	                    e.printStackTrace();
	                }
	            }
	        }
	    }
	 
	    /**
	     * Performs an HTTP GET request to the specified url.
	     *
	     * @param url The web address to post the request to
	     * @return The result of the request
	     * @throws Exception
	     */
	    public static String executeHttpGet(String url) throws Exception {
	        BufferedReader in = null;
	        try {
	            HttpClient client = getHttpClient();
	            HttpGet request = new HttpGet();
	            request.setURI(new URI(url));
	            HttpResponse response = client.execute(request);
	            in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
	 
	            StringBuffer sb = new StringBuffer("");
	            String line = "";
	            String NL = System.getProperty("line.separator");
	            while ((line = in.readLine()) != null) {
	                sb.append(line + NL);
	            }
	            in.close();
	 
	            String result = sb.toString();
	            return result;
	        } finally {
	            if (in != null) {
	                try {
	                    in.close();
	                } catch (IOException e) {
	                    e.printStackTrace();
	                }
	            }
	        }
	    }
	    
	    public static boolean isSet(String o) {
			boolean result = false;
			
			if (o != null && !o.equals("")) {
				result = true;
			}
			
			return result;
		}
		
		public static boolean isSet(URL url) {
			boolean result = false;
			
			if (url != null && !url.equals("")) {
				result = true;
			}
			
			return result;
		}	
		
		public static int urlExist(String url) {		
			URL newUrl = null;
			try {
				newUrl = new URL(url);			 			
			} catch (MalformedURLException e) {
				File f = new File(url);
				if (f.exists()) {
					try {
						newUrl = f.toURI().toURL();
					} catch (MalformedURLException e1) {
						e1.printStackTrace();
					}
				}
			}
			
			return urlExist(newUrl);
		}
		
		public static int urlExist(URL url) {
			int respCode = HttpURLConnection.HTTP_BAD_REQUEST;
			if (isSet(url)) {
				try {
					HttpURLConnection.setFollowRedirects(Boolean.FALSE);
					HttpURLConnection huc = (HttpURLConnection) url.openConnection();
					huc.setRequestMethod("POST");
		            huc.addRequestProperty(HttpHeaders.CONTENT_TYPE,  "application/x-www-form-urlencoded");
					respCode = huc.getResponseCode();
					
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			
			return respCode;		
		}
		
		private String website ="http://stsctenniscourts.com/";
		private String username = "";
		private String password = "";

	public static void PostIt(String urlJ) {
		URL url;
		HttpURLConnection connect;
		

		try {
			url = new URL(urlJ);

			// String sent in Http POST request.
			String params = "";

			connect = (HttpURLConnection) url.openConnection();
			connect.setRequestMethod("POST");
			connect.setDoInput(true);
			connect.setDoOutput(true);

			// Match all request headers as seen in Chrome developer tools
			// when eavesdropping on client/server communication.
			connect.setRequestProperty("Accept", "*/*");
			connect.setRequestProperty("Accept-Encoding", "gzip,deflate,sdch");
			connect.setRequestProperty("Accept-Language", "en-US,en;q=0.8");
			connect.setRequestProperty("Connection", "keep-alive");
			//connect.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
			//connect.setRequestProperty("Content-Type",  "application/x-www-form-urlencoded");
			connect.setRequestProperty("X-Requested-With", "XMLHttpRequest");

			OutputStreamWriter osw = new OutputStreamWriter(connect.getOutputStream());
			osw.write(params);
			osw.close();

			Scanner in = new Scanner(connect.getInputStream());
			while (in.hasNextLine()) {
				System.out.println(in.nextLine());
			}
			
			in.close();
		}// try
		catch (Exception e) {
			e.printStackTrace();
		} 
	}// log
}
